'''
Created on 21 nov. 2014

@author: geoff
'''

from modele import Parking, Acces, Voiture, Abonnement
from vue import PanneauAffichage
from random import randint

class CtrlParking:
    
    # ne controle qu'un seul parking
    def creerParking(self, ctrlBdd, nbNiv = None, nbPlacesNiv = None, prix = None):
        self.listeVoitures = []
        self.bdd = ctrlBdd
        if nbNiv and nbPlacesNiv and prix :
            self.parking = Parking.Parking(ctrlBdd, nbNiv, nbPlacesNiv, prix, False) 
            self.parking.remplirListeNiveaux()
            ctrlBdd.ajouterParking(self.parking)
            ctrlBdd.ajouterAbonnement("Abonné simple", "5.85")
            ctrlBdd.ajouterAbonnement("Abonné pack garanti", "8.30")
            '''v1 = Voiture.Voiture(120, 30, "abc001")
            self.listeVoitures.append(v1)
            v2 = Voiture.Voiture(201, 25, "def002")
            self.listeVoitures.append(v2)'''
            tamponAbo = ctrlBdd.renseignerListeAbonnements()
            if tamponAbo :
                for row in tamponAbo:
                    self.addAbonnement(row[0], row[1], row[2])
        else :
            self.parking = ctrlBdd.renseignerParking()
            self.parking.remplirListeNiveaux()
            tamponAbo = ctrlBdd.renseignerListeAbonnements()
            if tamponAbo :
                for row in tamponAbo:
                    self.addAbonnement(row[0], row[1], row[2])
                            
            tamponVoit = ctrlBdd.renseignerListeVoitures()
            if tamponVoit :
                for row in tamponVoit :
                    voiture = Voiture.Voiture(row[2], row[3], row[1], row[4])
                    if voiture.getEstGaree():
                        placement = ctrlBdd.renseignerPlacementVoiture(self.parking , voiture, row[0])
                        voiture.definirPlacement(placement)
                    ctrlBdd.renseignerStatutClient(voiture, row[0], self.parking.getListeAbo())
                    self.listeVoitures.append(voiture)
            
            
        self.acces1 = Acces.Acces(self.parking)
        self.acces2 = Acces.Acces(self.parking)
        
        #self.listeVoitures[0].demanderPlacement(self.acces2, ctrlBdd)
        #self.listeVoitures[0].demanderSortie(self.acces1, ctrlBdd)
    
    def getParking(self):
        return self.parking
    
    def getAcces(self, indice):
        if indice == 1:
            return self.acces1
        else :
            return self.acces2
        
    def getVoiture(self, indice):
        if indice <= len(self.listeVoitures) :
            return self.listeVoitures[indice]
    
    def getAllVoitures(self):
        for voiture in self.listeVoitures :
            print (voiture)
    
    def getListeVoitures(self):
        return self.listeVoitures
    
    def addVoitureDansListe(self, immat):
        longueur = randint(250,350)
        largeur = randint(35,44)
        v = Voiture.Voiture(longueur, largeur, immat)
        self.listeVoitures.append(v)
    
    def immatExiste(self, immat):
        i = 0
        trouve = 0
        while i < len(self.listeVoitures) and trouve == 0 :
            if self.listeVoitures[i].getImmatriculation() == immat :
                trouve = 1
            else :
                i = i+1
        
        return trouve
    
    def getVoitureParImmat(self, immat):
        i = 0
        trouve = 0
        while i < len(self.listeVoitures) and trouve == 0 :
            if self.listeVoitures[i].getImmatriculation() == immat :
                trouve = 1
            else :
                i = i+1
                
        return i
    
    def assignerProprietaire(self, indiceVoiture, nom, prenom, adresse, mail, tel):
        id = self.bdd.getIdNewClient()
        self.getVoiture(indiceVoiture).definirClient(nom, prenom, adresse, mail, tel, id)
    
    def assignerAbonnementProprietaire(self, bdd, indiceVoiture, bool):
        client = self.getVoiture(indiceVoiture).getProprietaire()
        
        if bool : # on lui attribue le titre abonné
            client.setAbonnement(self.parking.getListeAbo()[0])
            client.getAbonnement().ajouterContrat()
            bdd.updateAbonnement(client, 1)
        else : # on lui retire
            client.setAbonnement(False)
            # rompre contrat
            bdd.updateAbonnement(client, 0)
       
    
    def assignerSuperAboProprietaire(self, bdd, indiceVoiture, bool):
        client = self.getVoiture(indiceVoiture).getProprietaire()
        
        if bool : # on lui attribue le titre super abonné
            client.setAbonnement(self.parking.getListeAbo()[1])
            client.getAbonnement().ajouterContrat()
            bdd.updateAbonnement(client, 2)
            self.getVoiture(indiceVoiture).setPlaceAttribuee(True)
        else : # on lui retire
            client.setAbonnement(self.parking.getListeAbo()[0])
            # rompre
            bdd.updateAbonnement(client, 1)   
    
    def addAbonnement(self, id, libelle, prix):
        self.parking.getListeAbo().append(Abonnement.Abonnement(id, libelle, prix))
    
    def assignerTypePaiement(self, bdd, indiceVoiture, typePaiement):
        voiture = self.getVoiture(indiceVoiture)
        voiture.getPlacement().setTypePaiement(typePaiement)
        bdd.updatePlacementPaiement(voiture, typePaiement)
